#include "../include/Pixel.h"

//Pixel::Pixel(byte _r,byte _v,byte _b) : r(_r),v(_v),b(_b)
Pixel::Pixel(byte _r,byte _v,byte _b)
{
	v[0] = _r;
	v[1] = _v;
	v[2] = _b;
}

Pixel::Pixel(const Pixel& p){
	/*r = p.r;
	v = p.v;
	b = p.b;*/
	v[0] = p.v[0];
	v[1] = p.v[1];
	v[2] = p.v[2];
}

Pixel::~Pixel()
{}

Pixel &Pixel::operator+=(const Pixel &p)
{
    /*r += p.r;
    v += p.v;
    b += p.b;*/
	v[0] += p.v[0];
	v[1] += p.v[1];
	v[2] += p.v[2];
    
    return *this;
}

Pixel operator*(const Pixel&p, const double& d)
{
	Pixel r;
	/*r.r = p.r*d;
	r.v = p.v*d;
	r.b = p.b*d;*/
	r.v[0] = p.v[0]*d;
	r.v[1] = p.v[1]*d;
	r.v[2] = p.v[2]*d;
	return r;
}
Pixel operator+(const Pixel&p1, const Pixel& p2)
{
	Pixel r;
	/*r.r = p1.r+p2.r;
	r.v = p1.v+p2.v;
	r.b = p1.b+p2.b;*/
	r.v[0] = p1.v[0]+p2.v[0];
	r.v[1] = p1.v[1]+p2.v[1];
	r.v[2] = p1.v[2]+p2.v[2];
	return r;
}

Pixel operator-(const Pixel&p1, const Pixel& p2)
{
	Pixel r;
	/*r.r = p1.r-p2.r;
	r.v = p1.v-p2.v;
	r.b = p1.b-p2.b;*/
	r.v[0] = p1.v[0]-p2.v[0];
	r.v[1] = p1.v[1]-p2.v[1];
	r.v[2] = p1.v[2]-p2.v[2];
	return r;
}

void Pixel::N(){
	if(v[0]<0)
		v[0]=0;
	if(v[0]>255)
		v[0]=255;
	if(v[1]<0)
		v[1]=0;
	if(v[1]>255)
		v[1]=255;
	if(v[2]<0)
		v[2]=0;
	if(v[2]>255)
		v[2]=255;
}

//double Pixel::operator[](unsigned int i)
double Pixel::operator[](unsigned int i) const
{
	/*if(i == 0)
		return r;
	if(i == 1)
		return v;
	if(i == 2)
		return b;*/
	if ( i >= 0 && i < 3 )
		return v[i];
	return -1;
}

double& Pixel::operator[](unsigned int i)
{
	/*if(i == 0)
		return r;
	if(i == 1)
		return v;
	if(i == 2)
		return b;*/
	if ( i >= 0 && i < 3 )
		return v[i];
	return v[0];
}


byte Pixel::getR ()
{
	return v[0];
}

byte Pixel::getV ()
{
	return v[1];
}

byte Pixel::getB ()
{
	return v[2];
}


